// import com.alibaba.druid.sql.ast.*;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.Arrays;
// import java.util.List;
#pragma once
#include "../SQLStatementImpl.h"
#include "../SQLReplaceable.h"

class SQLDescribeStatement : virtual public SQLStatementImpl, virtual public SQLReplaceable
{
public:
  SQLName_ptr object;
  SQLName_ptr column;
  BOOL_ptr extended;
  BOOL_ptr formatted;

  // for odps
  SQLObjectType_ptr objectType;
  SQLExpr_list_ptr partition;

  SQLDescribeStatement();
  SHAREDOBJECT(SQLDescribeStatement);
  SQLName_ptr getObject();

  void setObject(SQLName_ptr object);

  SQLName_ptr getColumn();

  void setColumn(SQLName_ptr column);

  SQLExpr_list_ptr getPartition();

  void setPartition(SQLExpr_list_ptr partition);

  SQLObjectType_ptr getObjectType();

  void setObjectType(SQLObjectType_ptr objectType);

  BOOL_ptr isExtended();

  void setExtended(BOOL_ptr extended);

  BOOL_ptr isFormatted();

  void setFormatted(BOOL_ptr formatted);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  // @Override
  SQLObject_list_ptr getChildren();

  BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target);
};
